import sys
import re

# ---------------------- 基础功能 ----------------------
def count_characters(content):
    """统计字符数（包括所有字符：字母、空格、标点、换行等）"""
    return len(content)

def count_words(content):
    """统计单词数（仅英文单词，以空白字符分隔的连续字母序列）"""
    words = re.findall(r'\b[a-zA-Z]+\b', content)
    return len(words)

def count_sentences(content):
    """统计句子数（以.?!结尾的句子，忽略空句子）"""
    sentences = [s for s in re.split(r'[.!?]+\s*', content.strip()) if s]
    return len(sentences)

# ---------------------- 扩展功能 ----------------------
def count_total_lines(content):
    """统计总行数（包括空行）"""
    # split('\n')会将空文件拆分为['']，因此直接取长度即可
    return len(content.split('\n'))

def count_blank_lines(content):
    """统计空行数（仅包含空白字符或为空的行）"""
    lines = content.split('\n')
    # 过滤出空白行（strip()后为空字符串）
    return sum(1 for line in lines if not line.strip())

def count_comment_lines(content, comment_char='#'):
    """统计注释行（以指定注释符开头的行，默认支持Python风格#）"""
    lines = content.split('\n')
    # 过滤出注释行（strip()后以注释符开头，且非空行）
    return sum(1 for line in lines if line.strip().startswith(comment_char))

def count_code_lines(content, comment_char='#'):
    """统计代码行（非空行且非注释行）"""
    lines = content.split('\n')
    code_lines = 0
    for line in lines:
        stripped_line = line.strip()
        # 非空且非注释行才算代码行
        if stripped_line and not stripped_line.startswith(comment_char):
            code_lines += 1
    return code_lines

def main():
    if len(sys.argv) != 3:
        print("用法: python wc.py [参数] [文件名]")
        print("支持参数:")
        print("  -c    统计字符数")
        print("  -w    统计单词数")
        print("  -s    统计句子数")
        print("  -l    统计总行数")
        print("  -b    统计空行数")
        print("  -m    统计注释行数（默认支持#注释）")
        print("  -k    统计代码行数（非空非注释行）")
        sys.exit(1)
    
    option, filename = sys.argv[1], sys.argv[2]
    
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # 基础功能
        if option == '-c':
            print(f"字符数: {count_characters(content)}")
        elif option == '-w':
            print(f"单词数: {count_words(content)}")
        elif option == '-s':
            print(f"句子数: {count_sentences(content)}")
        # 扩展功能
        elif option == '-l':
            print(f"总行数: {count_total_lines(content)}")
        elif option == '-b':
            print(f"空行数: {count_blank_lines(content)}")
        elif option == '-m':
            print(f"注释行数: {count_comment_lines(content)}")
        elif option == '-k':
            print(f"代码行数: {count_code_lines(content)}")
        else:
            print(f"错误：未知参数 '{option}'")
            sys.exit(1)
    
    except FileNotFoundError:
        print(f"错误：文件 '{filename}' 不存在")
        sys.exit(1)
    except Exception as e:
        print(f"发生错误：{str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main()